#include<iostream>
#include<signal.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<string>
#include<cassert>
#include<cstring>
using namespace std;
long long count =0;
void catchSig(int signum)
{
    //cout<<"捕捉信号： "<<signum<<" pid: "<<getpid()<<endl;
    cout<<"count:"<<count<<endl;
    alarm(1);
}
void handler(int signum)
{
    cout<<"捕捉信号： "<<signum<<" 进程pid： "<<getpid()<<endl;
}
int main(int args,char*argv[])
{

    signal(SIGFPE,handler);
    int a=100;
    a/=0;
    while(true) sleep(1);
    // alarm(1);
    // signal(SIGALRM,catchSig);
    // while(true)
    // {
    //     count++;
    // }
    // //写一个mykill
    // if(args!=3)
    // {
    //     cout<<"参数错误"<<endl;
    //     exit(1);
    // }
    // int signum=atoi(argv[1]);
    // int pidnum=atoi(argv[2]);
    // kill(pidnum,signum);

    // signal(SIGINT,catchSig);//对2号信号自定义捕捉
    // while(true)
    // {
    //     cout<<"我是一个进程,pid:"<<getpid()<<endl;
    //     sleep(1);
    // }
    // pid_t id = fork();
    // if(id == 0)
    // {
    //     sleep(1);
    //     int a = 100;
    //     a /= 0;//除零错误
    //     exit(0);
    // }

    // int status = 0;
    // waitpid(id, &status, 0);
    // cout << "父进程：" << getpid() << " 子进程：" << id << \ 
    // " exit sig: " << (status & 0x7F) << " is core: " << ((status >> 7) & 1) << endl;
    //验证管道发送13号信号
    // int pipefd[2]={0};
    // int n= pipe(pipefd);
    // pid_t id =fork();
    // if(id==0)//子进程
    // {
    //     close(pipefd[0]);
    //     string message="我是子进程，我正在给父进程发消息";
    //     int count=0;
    //     char send_buffer[1024];
    //     while(true)
    //     {
    //         snprintf(send_buffer,sizeof(send_buffer),"%s[%d]:%d",message.c_str(),getpid(),count++);
    //         ssize_t m=write(pipefd[1],send_buffer,strlen(send_buffer));
    //         //if(count==3) break;
    //         sleep(1);
    //     }
    //     close(pipefd[1]);
    //     exit(105);
    // }

    // //父进程--读取
    // //关闭写入端
    //     close(pipefd[1]);
    //     char buffer[1024*8];
    //     int count2=0;
    //     while(1)
    //     {
    //         sleep(1);
    //         ssize_t s= read(pipefd[0],buffer,sizeof(buffer)-1);
    //         count2++;
    //         if(count2==5) 
    //         {
    //             cout<<"读端关闭"<<endl;
    //             break;
    //         }
    //         if(s>0)//读取成功
    //         {
    //             buffer[s]=0;
    //             cout<<"father get a message["<<getpid()<<"]"<<"Father#"<<buffer<<endl;
    //         }
    //         else 
    //             break;
    //     }
    // close(pipefd[0]);
    // int status=0;
    // pid_t ret=waitpid(id,&status,0);
    // cout<<"子进程退出码： "<<((status>>8)&0xFF)<<" core dump： "<<((status>>7)&1)<<" 退出信号： "<< (status&0x7F)<<endl;
    // assert(ret>0);
    // (void)ret;

    return 0;
}